package com.letcode.study.simple;

/**
 * 删除排序数组中的重复项
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2gy9m/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 * @Date 2022/11/9 11:56:36
 * @Author luopeng
 */
public class DeleteDuplicatesInTheSortedArray {
    public static void main(String[] args) {
        int[] nums = {1, 1, 2, 3, 3, 4, 4, 4, 5}; // 输入数组
        int[] expectedNums = {1,2,3,4,5}; // 长度正确的期望答案

        int k = removeDuplicates(nums); // 调用

        assert k == expectedNums.length;
        for (int i = 0; i < k; i++) {
            assert nums[i] == expectedNums[i];
        }
    }

    /**
     * 双指针---->快慢指针方式解决
     * 左右指针数相同，左指针不动，右指针+1
     * 左右指针数不相同，左指针+1对应的数与右指针对应的数交换位置
     * 最后左指针当前索引+1即为所需要返回的长度
     * @param nums
     * @return
     */
    public static int removeDuplicates(int[] nums) {
        int left = 0;
        for (int right = 1; right < nums.length; right++) {
            if (nums[left] != nums[right]) {
                nums[++left] = nums[right];
            }
        }
        return ++left;
    }
}
